package com.cs.paoyer.administration.exception;

import com.cs.paoyer.common.exception.ExceptionIdNotFound;
import com.cs.paoyer.common.exception.ExceptionVO;
import com.cs.paoyer.common.exception.ModuleExceptionInterface;
import com.cs.paoyer.common.exception.ModuleVO;
import com.cs.paoyer.common.exception.SystemException;

public class AdministrationUserException implements ModuleExceptionInterface {
  /**
   * Informaci�n del m�dulo al que pertenece el error.
   */
  public static final int ADMINISTRATION_MODULE = 1;

  
  /**
   * Representa el error ocurrido cuando, al realizar la b�squeda en la base de datos Oracle,
   * el usuario no fue encontrado.
   */
  public static final int ORACLE_USER_NOT_FOUND = 
         ADMINISTRATION_MODULE * USER_EXCEPTION + 1;
  /**
   * Representa el error ocurrido cuando un usuario intenta acceder a la aplicaci�n y
   * su informaci�n de login y password no son correctas.
   */
  public static final int WRONG_PASSWORD = 
         ADMINISTRATION_MODULE * USER_EXCEPTION + 2;
  /**
   * Error cuando los campos requeridos para la creaci�n de un usuario
   * no han sido fijados en su totalidad
   */
  public static final int NOT_ALL_REQUIRED_FIELDS =
         ADMINISTRATION_MODULE * USER_EXCEPTION + 3;
  /**
   * Finalizo la Session
   */
  public static final int ENDED_SESSION = 
         ADMINISTRATION_MODULE * USER_EXCEPTION + 4;

  /**
   * El usuario no puede loguearse porque no tiene permiso al recurso
   */
  public static final int IMPOSIBLE_ACCESS_TO_USER = 
         ADMINISTRATION_MODULE * USER_EXCEPTION + 5;

  
 public AdministrationUserException() {
  }

  /**
   * Retorna un objeto ExceptionVO que contienen informaci�n detallada
   * de un error que puede pasar en el m�dulo, seg�n el tipo de Excepcion
   * pasado en el tipo.
   * @param messageId int Identificador de la Excepcion definida para el modulo.
   * @return ExceptionVO
   */
  public ExceptionVO getExceptionVO(int exceptionId) throws SystemException {

    switch ( exceptionId ) {
      
      case ORACLE_USER_NOT_FOUND:
        return     new ExceptionVO( this.ORACLE_USER_NOT_FOUND, this.ADMINISTRATION_MODULE, "Usuario no encontrado en el servidor Oracle.", "Consulte con el administrador...." );
      case WRONG_PASSWORD:
        return     new ExceptionVO( this.WRONG_PASSWORD,        this.ADMINISTRATION_MODULE, "Credenciales no validas.", "Consulte con el administrador...." );
      case NOT_ALL_REQUIRED_FIELDS:
        return     new ExceptionVO(this.NOT_ALL_REQUIRED_FIELDS, this.ADMINISTRATION_MODULE,"No todos los campos requeridos para la creaci�n de un usuario, han sido especificados", "Por favor llenar todos los campos requeridos");
      case ENDED_SESSION:
        return     new ExceptionVO(this.ENDED_SESSION, this.ADMINISTRATION_MODULE, "Su Sesion de usuario ha caducado ", "Vuelva ha logearse, por favor");
      case IMPOSIBLE_ACCESS_TO_USER:
        return     new ExceptionVO(this.IMPOSIBLE_ACCESS_TO_USER, this.ADMINISTRATION_MODULE, "El usuario no tiene permisos suficientes ", "para acceder a la aplicacion ");      

     
      default:
        throw new ExceptionIdNotFound( exceptionId  );
    }
  }

  /**
   * Obtiene un objeto <code>ModuleVO</code> que contiene el nombre del modulo
   * y la clase que maneja las excepciones.
   *
   * @return Objeto <code>ModuleVO</code> que contiene el nombre del modulo
   * y la clase que maneja las excepciones.
   */
  public ModuleVO getModuleVO() {

    return new ModuleVO( "ADMINISTRATION", this.getClass().getName() );
  }
}